Tegeleme täna andmete visualiseerimisega, vaatame, kuidas R-s luua erinevat tüüpi diagramme ja mida selle juures silmas pidada.

Loo selleks RStudios uus projekt, loo projektikaustas kaust data, lae Moodle’st alla praktikumi andmestik ja kopeeri see kausta data. Antud andmestikku läheb vaja teise ülesande juures.

Harjutus 1

Loo all näidatud joondiagramm. Diagrammil kuvatakse andmed andmestikust economics, mis on kaasas paketis ggplot2. Diagrammi x-teljel on tunnus date, y-teljel tunnus uempmed. Joondiagrammi saab luua, kasutades ggplot-käsu järel funktsiooni geom_line.

Vaja läheb paketti ggplot2.

library(ggplot2)

Harjutus 2

2a

Lae sisse Euroopa Sotsiaaluuringu 10. laine andmed ja filtreeri andmestikku nii, et analüüsi jääksid ainult Eesti andmed.

library(haven)
library(tidyverse)

r10 <- read_sav("data/ess10.sav")

ee10 <- r10 %>% 
  filter(cntry == "EE")

Koosta hajuvusdiagramm kahe tunnusega:

  • hinnang sellele, kuivõrd on riiklikud valimised Eestis vabad ja ausad (tunnus fairelcc, asetage see x-teljele)
  • hinnang sellele, kuivõrd on vähemusgruppide õigused Eestis kaitstud (tunnus rghmgprc, asetage see y-teljele).

Tunnused on mõõdetud skaalal 0-10. Lisa diagrammi luues funktsiooni aes argumendiks ka weight = pspwght, et andmeid kaaluda. Hajuvusdiagrammi funktsiooniks on geom_point.

Kas need tunnused on omavahel seotud? Miks seda sellise diagrammi pealt hinnata ei saa? Mida saaks teha, et diagramm oleks loetavam?

Kui oled diagrammi loonud ja küsimustele vastanud, liigu edasi järgmisele paanile.

2b

Ilmselt said sellise diagrammi:

ggplot(ee10, aes(fairelcc, rghmgprc, weight = pspwght)) +
  geom_point()

Probleem on selles, et diagrammil on palju kattuvaid andmepunkte. Lisage funktsiooni geom_point argumendiks alpha = 0.1. Argument alpha väärtus võib varieeruda nullist üheni. Mida see argument teeb? Mida ütleksite kahe tunnuse vahelise seose kohta nüüd?

2c

Ilmselt said sellise diagrammi:

ggplot(ee10, aes(fairelcc, rghmgprc, weight = pspwght)) +
  geom_point(alpha = 0.1)

Proovige käsu geom_point(alpha = 0.1) asemel käsku geom_count(). Mida see käsk teeb?

Lõplik lahendus

geom_count esitab diagrammil punktide suurused selle järgi, kui palju samasuguste väärtustega indiviide n-ö ühe punkti taga on.

ggplot(ee10, aes(fairelcc, rghmgprc, weight = pspwght)) +
  geom_count()

Harjutus 3

Ülesanne

Eelmises harjutuses viimasena loodud diagrammi nimetatakse mulldiagrammiks. Mulldiagrammil saab aga punkti suuruse abil esitada mitte ainult indiviidide arvu, vaid ka mingi kolmanda tunnuse väärtuseid.

Laadige sisse pakett gapminder, milles on andmestik gapminder, lühiduse mõttes omistame selle objektile gm ja jätame andmestikku ainult viimase ehk 2007. aasta andmed. Andmestikus on riigi tasandil andmed keskmise oodatava eluea ja SKT kohta.

Kuidas on omavahel seotud keskmine oodatav eluiga ja SKT elaniku kohta? Koostage gapminderi andmetel mulldiagramm, kus

  • x-teljel on SKT elaniku kohta (gdpPercap) ja
  • y-teljel oodatav eluiga (lifeExp) ning
  • lisaks näitab punkti suurus elanike arvu riigis (tunnus pop).
  • Lisage punktidele natuke läbipaistvust ning
  • lisage ka diagrammi telgedele ja legendile eestikeelsed nimetused.
# install.packages("gapminder")
library(gapminder)

gm <- gapminder %>% 
  filter(year == 2007)

Tulemus

Harjutus 4

Ülesanne

Võttes aluseks eelmise ülesande, näidake mulldiagrammil eri kontinentidesse kuuluvad riigid (tunnus continent) eri värviga.

Tulemus

Diagrammil on muudetud ka kontinentide nimed eestikeelseks. Seda saab teha, kodeerides tunnuse continent ümber eestikeelseks (nt funktsiooniga recode), aga saab ka eraldi ggploti funktsooniga. Vaata lahendusest, kuidas viimast saab teha.

Lahendus

ggplot(gm, aes(gdpPercap, lifeExp, size = pop, colour = continent)) +
  geom_point(alpha = 0.5) +
  labs(x = "SKT elaniku kohta",
       y = "Keskmine oodatav eluiga sünnil",
       size = "Rahvaarv",
       colour = "Kontinent") +
  scale_colour_discrete(labels = c("Aafrika", "Ameerika", "Aasia", "Euroopa", "Okeaania"))

Lisa

Antud juhul pole diagrammilt näha, mis riiki milline mull esindab. Saaksime diagrammile lisada riikide nimed, aga sel juhul läheks diagramm liiga kirjuks. Üks võimalus oleks muuta diagramm interaktiivseks, nii et mulli peale hiirega liikudes oleks näha, mis riigiga tegu on. Selleks saab kasutada paketi plotly ja funktsiooni ggplotly abi.

Omistame eelneva diagrammi uuele objektile gm_plot ja lisame funktsiooni aes argumendiks text = country, et riiginimed talletuksid diagrammi objekti.

Interaktiivse joonise saamiseks kasutame funktsiooni ggplotly, mille argumendiga tooltip määrame ära, millise aes argumendi väärtusi soovime interaktiivselt esitada. Võite proovida muuta diagrammi nii, et lisaks riigi nimele esitatakse interaktiivselt ka näiteks riigi rahvaarv.

ggplotly(gm_plot, tooltip = "text")

Pange tähele, et kõik detailid siiski interaktiivsele joonisele üle ei kandu, nt rahvaarvu väärtusi legendis ei näidata, ilmselt plotly ei näita seal lihtsalt arvulise tunnuse väärtusi, see tuleks eraldi seadistada. Ka kontinentide nimed esitatakse ikkagi ingliskeelsetena, eestikeelsed nimed tuleks funktsiooniga ggplotly eraldi seadistada või kodeerida andmestikus gm eelnevalt tunnus continent ümber eestikeelseks.